System and method of message routing using name-based identifier in a distributed computing environment

ABSTRACT

A system and method of routing messages in a distributed computing environment is provided. The method includes providing a platform server, a set of intermediary servers, and a set of edge servers, collectively defining a network. The method includes binding, at the platform server, at a first instance, the end-point device to the platform server wherein the platform server binds, at the first instance, the end-point device using a non-addressable name value associated to the end-point device. The binding associates a first path across the network. The method includes communicating a first message to the end-point device along the first path. Method includes rebinding, at the platform server, at a second instance, the end-point device to the platform server, where the rebinding uses the non-addressable name value and associates a second path across the network. The method includes communicating a second message to the end-point device along the second path.

FIELD OF THE INVENTION

This invention generally relates to operations of a distributingcomputing environment. More particularly, in certain embodiments, theinvention relates to message routing using a name-based identifier in adistributed computing environment.

BACKGROUND

The business of building a connected world, also referred to as theInternet of Things, is rapidly growing. Some industry analysts haveestimated that the number of connected devices and systems (in anindustrial, consumer, government, and business setting) may rise fromfive billion devices to a trillion devices over the next ten years.

A given cluster of devices may include upwards of hundreds of thousandsof devices or more. Persistence connectivity can be used to lower theCPU and memory usage for a given connection, which reduces the cost ofsuch connectivity and is, particularly, beneficial when there are such avast number of connected devices. Persistence connectivity generallyrefers to a single connection between devices, which once established isused to send and receive multiple requests/responses between thedevices.

In one type of distributed computing architecture, one or more businesslogic servers (referred to as a “platform servers”) are employed toservice data and information for hundreds of thousands or more computingdevices. These servers may be designated, for example, based on a givengeographic region. For example, a platform server may service a group ofdevices in North America or the East Coast. The number of devicesconnecting to these servers typically exceeds the resource capacity ofsuch servers. To this end, intermediary servers may be employed tomanage the connections between the computing devices and the platformservers. Because of the potential benefit in efficiency operation,persistent connectivity may reduce the number of intermediary servers orplatform servers necessary to provide data service to a given number ofcomputing devices.

When operating a load-balanced service, maintaining information thatmust or should be kept across the multiple requests in a user's sessionis useful. This information is typically referred to as a session state.A common example of an application that uses session state is a Webbrowser that uses cookies. However, a typical persistence connectionsbetween two network nodes use each other's network configuration. Tothis end, multiplexing persistence connection may cause the stateinformation to be lost.

SUMMARY

In general overview, an intermediary party provides a software libraryand computing architecture for building a federation of distributedcomputing systems to service data for a vast number of computingdevices. To achieve connectivity to a large number of devices, thefederation generally includes multiple server nodes to share theworkload. The server nodes can be logical/virtual or physical.

In some implementations, a platform server communicates to a givencomputing device across one or more intermediary servers over persistentconnections. The platform routes data to and from data storage serversand various back-end servers that provide services to the computingdevices. To this end, the intermediary servers multiplex messages sentfrom an persistent connections established with the edge servers to anpersistent connection established with the platform server.

To maintain these persistent connections, formed among the deviceswithin the federation while allowing a given computing device to freelymove within the system, the edge and intermediary servers preferablyoperate using one or more non-network addressable identifiers associatedto a given computing device.

In some implementations, messages sent across the persistent connectionsinclude a name identifier associated only with a given computing system.This feature beneficially allows the computing device to be serviced bythe federation while being connected to any edge server within thefederation. To this end, the computing device does not need to have anyknowledge of the device's own location or any networking or routingdetails about nodes within the federation. The computing devices merelyhas to register, by providing its name and a corresponding security key(in some implementations), to a given edge server, to which the deviceis automatically bound to a path within the federation.

In some implementations, the intermediary servers may maintain andenforce authentication state for a given computing device within thefederation. The intermediary servers may maintain the authenticationstate for a given session with a computing device once the credentialsof the computing device is verified. In doing so, the platform serverdistributes the management of the authentication session to theintermediary server while allowing the platform to still perform theauthentication.

In some implementations, the intermediary servers are statelessconnection managers in that the intermediary server does not maintainstate information of messages that it sends or receives. To this end,data and information may be pipelined to independently operatingintermediary servers, which may, thus, share connectivity work load withvarious intermediary servers.

Applications for the systems and methods described herein are notlimited to the aforementioned examples, but may be deployed in anynumber of contexts, as would be understood by one of ordinary skill inthe art. Contents of the background are not to be considered as anadmission of the contents as prior art.

In one aspect, the present disclosure describes a method of messagerouting using a name-based identifier in a distributed computingenvironment. The method may include providing a platform server, a setof intermediary servers, and a set of edge servers, collectivelydefining a network where an end-point device communicates to an edgeserver of the set of edge servers, the set of edge servers communicatesto the set of intermediary servers, and the set of intermediary serverscommunicates to a platform server.

In some implementations, the method may include binding, at a platformserver, at a first instance, the end-point device to the platform serverwherein the platform server binds, at the first instance, the end-pointdevice using a non-addressable name value associated to the end-pointdevice. The binding, at the first instance, associates a first pathacross the network where the first path is defined between the end-pointdevice and the platform server across one or more intermediary serversand one or more edge servers.

In some implementations, the method may include communicating, at theplatform server, a first message to the end-point device along the firstpath.

In some implementations, the method may include rebinding, at theplatform server, at a second instance, the end-point device to theplatform server where the platform server binds, at the second instancethe end-point device, using the non-addressable name value associated tothe end-point device. The non-addressable name value may include acharacter string. The rebinding, at the second instance, associates asecond path across the network where the second path is defined betweenthe end-point device and the platform server across one or moreintermediary servers and one or more edge servers, including a secondintermediary server.

In some implementations, the method may include communicating, at theplatform server, a second message to the end-point device along thesecond path. Each of the first path and the second path may include aconnection handle to an established persistent connection. Theestablished persistent connection may include a WebSocket connection. Atleast one of the first path and the second path may include at least twointermediary servers.

In some implementations, the method may include receiving, at theplatform server, at a given instance between the first and secondinstances, a request to unbind the end-point device from the platformserver where the platform server unbinds the end-point device based onthe unbind request and where the unbinding dissociates the first pathdefined between the end-point device and the platform server.

In some implementations, the method may include binding, at the platformserver, at the first instance, a second end-point device to the platformserver where the platform server binds, at the first instance, thesecond end-point device based on a second non-addressable name valueassociated to the second end-point device. The binding of the firstend-point device and the binding of the second end-point device may bethe result of a single bind request.

In one aspect, the present disclosure describes a system including aprocessor and a memory, the memory storing instruction that, whenexecuted by the processor, cause the processor to bind, at a firstinstance, the end-point device using a non-addressable name valueassociated to the end-point device. The binding, at the first instance,associates a first path across the network where the first path isdefined between the end-point device and the bound server across one ormore intermediary servers and one or more edge servers.

In some implementations, the instructions, when executed, further causethe processor to communicate a first message to the end-point devicealong the first path.

In some implementations, the instructions, when executed, further causethe processor to rebind at a second instance using the non-addressablename value associated to the end-point device. The non-addressable namevalue may include a character string. The rebinding, at the secondinstance, associates a second path across the network where the secondpath is defined between the end-point device and the bound server acrossone or more intermediary servers and one or more edge servers.

In some implementations, the instructions, when executed, further causethe processor to communicate a second message to the end-point devicealong the second path. Each of the first path and the second path mayinclude a connection handle to an established persistent connection. Theestablished persistent connection may include a WebSocket connection. Atleast one of the first path and the second path may include at least twointermediary servers.

In some implementations, the instructions, when executed, further causethe processor to receive a request to unbind the end-point device fromthe bound server based on the unbind request where the unbindingdissociates the first path defined between the end-point device and thebound server.

In one aspect, the present disclosure describes a non-transitorycomputer readable medium having instructions stored thereon, where theinstructions, when executed by a processor, cause the processor to bind,at a first instance, the end-point device using a non-addressable namevalue associated to the end-point device. The binding, at the firstinstance, associates a first path across the network where the firstpath is defined between the end-point device and the bound server acrossone or more intermediary servers and one or more edge servers.

In some implementations, the instructions, when executed, further causethe processor to communicate a first message to the end-point devicealong the first path.

In some implementations, the instructions, when executed, further causethe processor to rebind at a second instance using the non-addressablename value associated to the end-point device. The non-addressable namevalue may include a character string. The rebinding, at the secondinstance, associates a second path across the network where the secondpath is defined between the end-point device and the bound server acrossone or more intermediary servers and one or more edge servers.

In some implementations, the instructions, when executed, further causethe processor to communicate a second message to the end-point devicealong the second path. Each of the first path and the second path mayinclude a connection handle to an established persistent connection. Theestablished persistent connection may include a WebSocket connection. Atleast one of the first path and the second path may include at least twointermediary servers.

In some implementations, the instructions, when executed, further causethe processor to receive a request to unbind the end-point device fromthe bound server based on the unbind request where the unbindingdissociates the first path defined between the end-point device and thebound server.

In one aspect, the present disclosure describes a method of routingmessages in a distributed computing environment between a platformserver and an end-point device. The method may include providing aplatform server and one or more intermediate servers where each of theintermediate servers connects and maintains a persistent connection tothe platform server and where the intermediate servers communicate andmaintain a number of persistent connections with a number of edgeservers. The intermediate server may not maintain state informationassociated with message content embedded within the given message.

In some implementations, the method may include receiving, by a port ata given intermediate server, a service request from a given edge serverof the edge servers over a first persistent connection.

In some implementations, the method may include inserting, by theprocessor at the intermediate server, a given state identifier to theservice request where the given state identifier is associated to aconnection identity of the first persistent connection and where theassociation is stored in memory at the intermediate server.

In some implementations, the method may include transmitting, at theintermediate server, the service request to the platform server over asecond persistent connection.

In some implementations, the method may include receiving, at theintermediate server, a response message over the second persistentconnection, the response message having been generated by the platformserver in response to the service request where the response messageincludes the given state identifier.

In some implementations, the method may include retrieving, at theintermediate server, the connection identity of the first persistentconnection using the given state identifier where the given stateidentifier is the same state identifier transmitted within the servicerequest. The given state identifier may be inserted into a headerportion of the service request.

In some implementations, the method may include routing, at theintermediate server, the response message to a selected connection ofthe persistent connections with the edge servers where the selectedconnection is based on the retrieved connection identity. The persistentconnections may be Web-Socket connections.

In some implementations, the intermediate server may maintain, in thememory, a second state identifier associated with an authenticationexchange having been conducted between the computing device connected tothe given edge server and the platform server. The second stateidentifier may be associated with a name value associated with that ofthe computing device. In such implementation, the method may includecomparing, using the processor at the intermediate server, a deviceidentifier located within the service request to the name value. Ifthere is a match, the intermediate server may inject the second stateidentifier into the service request where the device identifier isassociated with an identity of a given computing device operativelycommunicating with the given edge server. If the comparison is not amatch, the intermediate server may send an unbind request to the givenedge server where the unbind request causes the device identifier to beremoved from a binding list of one or more device identifiers stored atthe edge server. The second state identifier may be associated to theconnection identity of the first persistent connection and where theassociation is stored in memory at the intermediate server.

In one aspect, the present disclosure describes a system, namely anintermediate server, including a processor and a memory, the memorystoring instruction that, when executed by the processor, cause theprocessor to receive, by a port, a service request from a given edgeserver over a first persistent connection.

In some implementations, the instructions, when executed, further causethe processor to insert a given state identifier to the service requestwhere the given state identifier is associated to a connection identityof the first persistent connection and where the association is storedin memory at the intermediate server.

In some implementations, the instructions, when executed, further causethe processor to transmit the service request to the platform serverover a second persistent connection.

In some implementations, the instructions, when executed, further causethe processor to receive a response message over the second persistentconnection, the response message having been generated by the platformserver in response to the service request where the response messageincludes the given state identifier.

In some implementations, the instructions, when executed, further causethe processor to retrieve, at the intermediate server, the connectionidentity of the first persistent connection using the given stateidentifier where the given state identifier is the same state identifiertransmitted within the service request. The given state identifier maybe inserted into a header portion of the service request.

In some implementations, the instructions, when executed, further causethe processor to route the response message to a selected connection ofthe persistent connections with the edge servers where the selectedconnection is based on the retrieved connection identity. The persistentconnections may be Web-Socket connections.

In some implementations, the intermediate server may maintain, in thememory, a second state identifier associated with an authenticationexchange having been conducted between the computing device connected tothe given edge server and the platform server. The second stateidentifier may be associated with a name value associated with that ofthe computing device. In such implementation, the intermediate servermay compare, by the processor, a device identifier located within theservice request to the name value. If there is a match, the intermediateserver may inject the second state identifier into the service requestwhere the device identifier is associated with an identity of a givencomputing device operatively communicating with the given edge server.If the comparison is not a match, the intermediate server may send anunbind request to the given edge server where the unbind request causesthe device identifier to be removed from a binding list of one or moredevice identifiers stored at the edge server. The second stateidentifier may be associated to the connection identity of the firstpersistent connection and where the association is stored in memory atthe intermediate server.

In one aspect, the present disclosure describes a non-transitorycomputer readable medium having instructions stored thereon, where theinstructions, when executed by a processor, cause the processor toreceive, by a port, a service request from a given edge server over afirst persistent connection.

In some implementations, the instructions, when executed, further causethe processor to insert a given state identifier to the service requestwhere the given state identifier is associated to a connection identityof the first persistent connection and where the association is storedin memory at the intermediate server.

In some implementations, the instructions, when executed, further causethe processor to transmit the service request to the platform serverover a second persistent connection.

In some implementations, the instructions, when executed, further causethe processor to receive a response message over the second persistentconnection, the response message having been generated by the platformserver in response to the service request where the response messageincludes the given state identifier.

In some implementations, the instructions, when executed, further causethe processor to retrieve, at the intermediate server, the connectionidentity of the first persistent connection using the given stateidentifier where the given state identifier is the same state identifiertransmitted within the service request. The given state identifier maybe inserted into a header portion of the service request.

In some implementations, the instructions, when executed, further causethe processor to route the response message to a selected connection ofthe persistent connections with the edge servers where the selectedconnection is based on the retrieved connection identity. The persistentconnections may be Web-Socket connections.

In some implementations, the intermediate server may maintain, in thememory, a second state identifier associated with an authenticationexchange having been conducted between the computing device connected tothe given edge server and the platform server. The second stateidentifier may be associated with a name value associated with that ofthe computing device. In such implementation, the intermediate servermay compare, by the processor, a device identifier located within theservice request to the name value. If there is a match, the intermediateserver may inject the second state identifier into the service requestwhere the device identifier is associated with an identity of a givencomputing device operatively communicating with the given edge server.If the comparison is not a match, the intermediate server may send anunbind request to the given edge server where the unbind request causesthe device identifier to be removed from a binding list of one or moredevice identifiers stored at the edge server. The second stateidentifier may be associated to the connection identity of the firstpersistent connection and where the association is stored in memory atthe intermediate server.

In one aspect, the present disclosure describes a method of routingmessage between a platform server and a plurality of end-point devicevia a connection server in a distributed computing environment. Themethod may include providing a platform server, a set of intermediaryservers, and a set of edge servers, collectively defining a networkwhere an end-point device communicates to an edge server of the set ofedge servers, the set of edge servers communicates to the set ofintermediary servers, and the set of intermediary servers communicatesto a platform server.

In some implementations, the method may include receiving, by a port atthe platform server, a first data message from a first end-point deviceover a first persistent connection where the first data message has beenrouted through a first intermediate server over a second persistentconnection.

In some implementations, the method may include receiving, by the portat the platform server, a second data message from a second end-pointdevice over a third persistent connection, wherein the second datamessage has been routed through a second intermediate server over afourth persistent connection. The persistent connections may includeWebSocket.

In some implementations, the method may include servicing, by aprocessor at the platform server, the first data message and the seconddata message where each of the first intermediate server and secondintermediate server manages connectivity between the end-point devicesand the platform servers. Each of the first intermediate server andsecond intermediate server may manage authentication sessions betweenthe end-point devices and the platform servers. The platform server mayservice the first data message and the second data message by routingthe messages to an back-office server selected from a group consistingof a persistence server, a database server, a customer relationshipmanagement (CRM) server, an enterprise resource planning (ERP) server,an operation support system (OSS) server, a business support system(BSS) server, and a data warehouse.

In one aspect, the present disclosure describes a system including aprocessor and a memory, the memory storing instruction that, whenexecuted by the processor, cause the processor to receive, by a port, afirst data message from a first end-point device over a first persistentconnection where the first data message has been routed through a firstintermediate server over a second persistent connection.

In some implementations, the instructions, when executed, further causethe processor to receive, by the port, a second data message from asecond end-point device over a third persistent connection, wherein thesecond data message has been routed through a second intermediate serverover a fourth persistent connection. The persistent connections mayinclude WebSocket.

In some implementations, the instructions, when executed, further causethe processor to service the first data message and the second datamessage where each of the first intermediate server and secondintermediate server manages connectivity between the end-point devicesand the platform servers. Each of the first intermediate server andsecond intermediate server may manage authentication sessions betweenthe end-point devices and the platform servers. The platform server mayservice the first data message and the second data message by routingthe messages to an back-office server selected from a group consistingof a persistence server, a database server, a customer relationshipmanagement (CRM) server, an enterprise resource planning (ERP) server,an operation support system (OSS) server, a business support system(BSS) server, and a data warehouse.

In one aspect, the present disclosure describes a non-transitorycomputer readable medium having instructions stored thereon, where theinstructions, when executed by a processor, cause the processor toreceive, by a port, a first data message from a first end-point deviceover a first persistent connection where the first data message has beenrouted through a first intermediate server over a second persistentconnection.

In some implementations, the instructions, when executed, further causethe processor to receive, by the port, a second data message from asecond end-point device over a third persistent connection, wherein thesecond data message has been routed through a second intermediate serverover a fourth persistent connection. The persistent connections mayinclude WebSocket.

In some implementations, the instructions, when executed, further causethe processor to service the first data message and the second datamessage where each of the first intermediate server and secondintermediate server manages connectivity between the end-point devicesand the platform servers. Each of the first intermediate server andsecond intermediate server may manage authentication sessions betweenthe end-point devices and the platform servers. The platform server mayservice the first data message and the second data message by routingthe messages to an back-office server selected from a group consistingof a persistence server, a database server, a customer relationshipmanagement (CRM) server, an enterprise resource planning (ERP) server,an operation support system (OSS) server, a business support system(BSS) server, and a data warehouse.

BRIEF DESCRIPTION OF THE DRAWINGS

The foregoing and other objects, aspects, features, and advantages ofthe present disclosure will become more apparent and better understoodby referring to the following description taken in conjunction with theaccompanying drawings, in which:

FIG. 1 is a block diagram of an example system for enablingcommunication between a platform server and a plurality of computingdevices in accordance with an embodiment of the invention.

FIG. 2 is a block diagram of an example persistent-communicationchannels established between a given platform server and a givencomputing device in accordance with an embodiment of the invention.

FIG. 3 is an example of a messaging structure of the communication APIprotocol in accordance with an embodiment of the invention.

FIG. 4 illustrates example messaging code employed by the communicationAPI protocol in accordance with an embodiment of the invention.

FIG. 5 is a swim-lane diagram of an example method of injecting stateand routing information into a communication exchange between a platformserver and an end-point device over a stateless persistent connection inaccordance with an embodiment of the invention.

FIG. 6 is a swim-lane diagram of the method of injecting state androuting information into a data-request communication-exchange between aplatform server and an end-point device over a stateless persistentconnection in accordance with an embodiment of the invention.

FIG. 7 is a flow chart for an example method of controlling a connectionserver in accordance with an embodiment of the invention.

FIG. 8 illustrates a method of rebinding a persistent connection pathfor a computing device in accordance with an embodiment of the invention

FIG. 9 is a block diagram of an example system in accordance with anembodiment of the invention.

FIG. 10 is a flowchart of an example method of injecting state androuting information into a communication exchange between a platformserver and an end-point device over a stateless persistent connection inaccordance with an embodiment of the invention.

FIG. 11 is a flowchart of an example method of communication between twonetwork nodes and an intermediary node over a persistent connection inaccordance with an embodiment of the invention.

FIG. 12 is a flow chart of an example method 1202 of communicationbetween the platform server and a plurality of an end-point device inaccordance with an embodiment of the invention.

FIG. 13 is a block diagram of a computing device and a mobile computingdevice.

The features and advantages of the present disclosure will become moreapparent from the detailed description set forth below when taken inconjunction with the drawings, in which like reference charactersidentify corresponding elements throughout. In the drawings, likereference numbers generally indicate identical, functionally similar,and/or structurally similar elements.

DETAILED DESCRIPTION

FIG. 1 is a block diagram of an example system 100 for enablingcommunication between a platform server 102 and a plurality of computingdevices 104 in accordance with an embodiment of the invention. Each ofthe computing devices 104 connects to an edge server 106 that servicesand maintains communication with a group of computing devices 108. Acomputing device 104, in some examples, is an electronic device that cancommunicate properties-, services-, and events-data and informationrelating to physical assets/devices, computer applications and systems,people, data objects, and platform services.

In some implementations, the computing device 104 is a sensor or amachinery at an industrial complex; a computer or an office equipment ata business or government office; a point-of-sale machine at a marketplace or a vending machine; a construction equipment or a vehicle; apower generation or distribution equipment; a power substation ortransmission equipment; a building meter; a server; a networking orrouting equipment; a smart appliance; an exercise machine; a medicaldevice or a prosthesis device; a medical diagnostic device or a hospitalequipment; a commercial vehicle or a transport container; a motorvehicle or an electric bicycle; a cellphone, a laptop, a tablet, anelectronic reader; or a clothing electronic-tag.

An edge server, in some implementations, is an electronic device thathas communication ports to interface to the endpoint device. The edgeserver may be, for example, but not limited to, a gateway device, anetwork server, a single board computer, a supervisory control and dataacquisition system (“SCADA”), or a programmable logic controller (“PLC”)The edge server may communicate to the endpoint device by industrial,commercial, computing, and military physical connection standards. Thesestandards may include, for example, but not limited to, Modbus, RS-232,RS-422, RS-485, Serial-ATA, SCSI, FireWire (IEEE 1394), Ethernet,Universal Serial Bus, SONET (“Synchronous Optical Networking”),MIL-STD-1553, I²C (“Inter-Integrated Circuit”), CAN-bus (“controllerarea network”), ARINC 739 (“Avionics Digital Video Bus”), BACnet,LonWorks. The standards may also include health/medical communicationstandards, such as CEN ISO/IEEE 11073. The examples are merely forillustrative purposes. To this end, other types of standards may also beemployed.

To serve data and information for sets of computing devices 104, one ormore edge servers 106 may communicate to an intermediary server,referred to as a connection server 110 or an “API server 110”, over afirst persistent connection 103. The connection server 110, in turn,communicates to the platform server 102 over a second persistentconnection 105. In essence, the connection server 110 form a persistentpath between the platform server 102 and a given edge server 106 acrossthe first persistent connection 103 and the second persistent connection105.

Collectively, the platform servers 102, the connection servers 110, andthe edge servers 106 form a federation of distributed computing systems.In some implementations, the platform servers 102 are business logicservers that maintain connectivity to a given computing device 104. Insuch instances, the platform server 102 may communicate to variousback-office servers that provide service functions, such as searching,storing, and managing, among others, for the data and information of thecomputing device 104. To this end, the platform server 102 may merelyserve to route data to and from various applications and systems withthe computing devices 104.

In some implementations, the platform server 102 may manage theauthentication process of the computing devices 104.

In some implementations, the platform server 102 routes data to and fromthe various back-office applications and systems. For example, when datais received from a specific computing device 104, the platform server102 may route the data to another database server. In other embodiments,a third party application may request the data to be sent by theplatform server.

Back-office servers may include, for example, third-party products forCRM/ERP (“customer relationship management” and/or “enterprise resourceplanning”), data analytics, Big Data Store (such as Hadoop, DataWarehouses, and various distributed file systems), identity management,billing, provisioning, and providing Web service. Examples of suchback-office systems may include SAP® Enterprise Resource Planning “ERP”,Salesforce® Customer Relationship Management “CRM”, Operations SupportSystem “OSS”, and Business Support Systems “BSS” Components.

Various data storage and applications may communicate with the platformserver 102. In some implementations, this communication may be by way ofWeb Services, Java Database Connectivity (JDBC), or native APIs.

In some implementations, the communication exchange between theconnection servers 110 and the edge servers 106 occurs across a networkinfrastructure 112, such as the Internet 112 a, a Wide-area network 112b, or a third-party network 112 c. In turn, one or more connectionservers 110 communicate to the platform server 102. The platform server102, the connection servers 110, and the edge servers 106, collectively,forms a distributed computing system. In some implementations, a givenconnection server 110 communicates to a set of edge servers 106 througha set of network security equipment 114. The security equipment securesthe connection server 110 and platform server 102 from the open networkinfrastructure 112. It also secures the groups of edge servers 106 andcomputing devices 104 from the same. The network security equipment 114may include, for example, a firewall or Network Address Translation(NAT) protocol.

FIG. 2 is a block diagram of an example persistent communication channel200 established between a given platform server 102 and a givencomputing device 104 in accordance with an embodiment of the invention.

The platform server 102 runs a server-client application using an APIprotocol library 204 a that manages the communication over the channel200. The edge server 106 runs a server-client application 204 c thatruns the same communication API protocol library 204. To this end,messages being communicated inbound and outbound between the platformserver 102 and the edge servers 106 are, for the most part, symmetricalin that these messages share the same message structure.

In some implementations, the API protocol library 204 is a binaryDynamic REST API. Examples of methods of communicating using the binaryDynamic REST APIs are described in co-pending and concurrently filedU.S. patent application, titled “SYSTEM AND METHOD OF USING BINARYDYNAMIC REST MESSAGES”, filed Mar. 21, 2014, naming inventors RickBullotta, John Canosa, Bob DeRemer, and Mike Mahoney, and havingattorney docket no. 2009132-0035. This application is incorporated byreference in their entirety.

This symmetry is intended to reduce the complexity of operation of theconnection server 110 as the connection server 110 can generally serviceeach communicated message in the same manner without much regard to thesource or target.

In some implementations, the communication API protocol generates eachmessage with metadata relating to the connection. The connection server110 may use the connection metadata to preserve state information atboth the edge server 106 and the platform server 102. To this end, thestate information for a given edge server 106 and a given platformserver 102 is communicated within each message allowing the servers tobe stateless. In some implementations, the connection metadata merelymay include a message identifier, authentication state information, androuting information associated with a given persistent connection.

FIG. 3 is an example message structure 300 of the communication APIprotocol 204 in accordance with an embodiment of the invention. Themessage structure 300 may include both a header 302 that provides theconnection metadata and a body 304 that provides the message content.

In some implementations, the header 302 may include a sessionidentification number 308, referred to as a “SessionId 308.” The sessionidentification number is preferably associated to both a given nameidentifier of an end-point device and a connection handle of apersistent connection. The association may be used by the connectionserver 110 to determine a binding path of a given computing device 104.The connection server 110 may use the session identification number tomanage authentication session state on behalf of the platform server102.

In some implementations, the connection server 204 may generate thesession identification number 308 during an authentication processassociated with a given computing device 104. During the process, theconnection 204 stores the session identification number 308 and thecommunication handle from which the message was received. In someimplementations, the session identification number 308 is preferably a32-digit long binary number with the most-significant digit (MSB) first,though it can be of various data length and endian.

In some implementations, the header 302 may include an endpointidentification number 310, referred to as an “EndPointId 310”, that isassociated to a given persistent connection 202. The connection servercan subsequently retrieve the connection handle using the endpointidentification number 310. The endpoint identification number 310 ispreferably a 32-digit long binary number with the most-significant digit(MSB) first. The connection server 110 may use the endpointidentification number to preserve routing state information lost due tothe multiplexing of the persistent connection.

The header 302 may include other information fields to improve theoperational efficiency of the messaging protocol. In someimplementations, the header 302 may include a request identificationnumber 306, referred to as a “RequestId 306,” that is associated to agiven message. The request identification number 306 may be randomlygenerated or incrementally generated to be unique for a given persistentcommunication channel 200. The request identification number 306 may beemployed to determine whether a service request has been fulfilled. Insome implementations, the request identification number 306 ispreferably a 24-digit long binary number with the most-significant digit(MSB) first, though it can be of various data length and endian.

In some implementations, the header 302 may include a message type field312, referred to as a “Method code 312.” The message field may includecodes to allow for the quick identification of the type of message beingreceived. For simple messages, such as an acknowledgement or errormessage, the message type field 312 may constitute the message. Forrequest messages, the message type field 312 may include a codecorresponding to a type of request. In some implementations, the requesttype message may be based on an HTTP framework.

In some implementations, the header 302 may include a multi-part messagefield 314, referred to as “Multipart 314.” This field may be used toidentify whether the message is a part of a group of message having thesame request identification number 306. The header identification number316 is preferably a 8-bit number.

FIG. 4 illustrates example message codes employed by the communicationAPI protocol in accordance with an embodiment of the invention. Thecodes include HTTP-based request messages 318, HTTP-based success codes320, HTTP-based server-error codes 322, and HTTP-based client-errorcodes 324.

In an aspect of an embodiment of the invention, the connection server110 injects routing state information to an inbound message being sentto the platform server 102. The inventors have found that injectingstate information over a stateless connection improves performance ofthe connection over typical stateful connections.

In having the routing state information embedded within each message,the connection server can complete a roundtrip message transfer, in someimplementations, using merely a lookup of the connection handleassociated with the routing state identifier.

In another aspect of an embodiment of the invention, the connectionserver 110 injects the authentication state information to an inboundmessage being sent to the platform server 102. In having the sessionstate embedded within the message, the connection server 110 takes overthe managing of the authentication session, thus freeing resources forthe platform server, preferably to manage more devices.

FIG. 5 is a swim-lane diagram of an example method 500 of injectingstate and routing information into a communication exchange between aplatform server 102 and an end-point device 104 over a multiplexedstateless persistent connection in accordance with an embodiment of theinvention.

The method 500, in some implementations, begins with a computing device104 (referred to as endpoint device “D1”) registering with an edgeserver 106 (referred to as edge server “E1”) (step 501 a). In someimplementations, the registration may be a handshake or some automatedprocess of negotiation to establish communication between the endpointdevice “D1” and the edge server “E1”. The edge server “E1” is anelectronic device that has communication ports to interface to theendpoint device D1.

The edge server “E1”, which is executing a client-side application usingthe API protocol library 204, prepares (step 502 a) an authenticationrequest message 502 b in accordance, for example, with the requestmessage structure as described in relation to FIGS. 3 and 4. The requestmessage 502 b may include a “RequestId R1” (shown as “R1”) correspondingto the request identification number 306, as described in relation toFIG. 3. The edge server “E1” (106) then sends (step 502 c) theauthentication request message 502 b to the connection server 110 over afirst persistent connection established between the edge server “E1”(106) and the connection server “A1” (110).

The body of the message, in some implementations may include anauthentication message (shown as “<Auth>”). The authentication messagemay include an authentication name and a corresponding authenticationpassword. In some implementations, the authentication name may be thename identifier of the edge server “E1” (106). The name identifier maybe random or descriptive. The name identifier may have some reference tothe owner and type of device. For example, an electrocardiogram deviceno. 123 owned by the John Doe Medical Institute may have a descriptivename identifier of “JohnDMedInt_EKG_Dev_123.”

In some implementations, the authentication name and the correspondingsecurity code may be in an UTF8 data-type string (“Unicode Standard—8bits”). The string may be of any length and may be preceded, in themessage, by a length value corresponding to the string length in theUTF8 format. The corresponding security code may, for example, be apassword, such as “GoodPassWord123”. Of course, various values andlength may be employed. In other implementations, the authenticationmessage may be a security key, which can be an encrypted data stringgenerated using a token associated with a name identifier of the edgeserver “E1”. Various conventional authentication techniques may beemployed.

In some implementations, the edge server “E1” (106) may require a secondset of authentication credentials in addition to the authentication nameand corresponding authentication password used in the authenticationmessage. The second set of authentication credentials may be specific tothe edge server “E1” (106) to prevent a non-authenticated computingdevices from binding with it and may be employed.

Still referring to FIG. 5, upon receiving the authentication requestmessage 502 b, in some implementations, the connection server “A1” (110)injects (step 502 d) “SessionId S1” (shown in FIG. 5 as “s1”) and“EndpointId e1” (shown as “e1”) into the received message 502 b toproduce message 502 e. The connection server “A1” (110) then sends (step502 f) the message 502 e to the platform server 102, referred to as theplatform server “P1” (102), over a second persistent connectionestablished between the connection server “A1” (110) and the platformserver “P1” (102). The “EndpointId e1” may correspond to the endpointidentification number 310, as described in relation to FIG. 3, that isassociated to the first persistent connection. The “SessionId s1” maycorrespond to the session identification number, as also described inrelation to FIG. 3, that is associated to a given persistent connectionand the name identifier belonging to the endpoint device D1 (104).

In some implementations, the received message 502 b has a NULL or EMPTYvalue in the header fields 306 and 308. To this end, the “SessionId s1”and the “EndpointId e1” can merely replace the values there. In otherimplementations, the received message 502 b is concatenated with the“SessionId s1” and the “EndpointId e1”. Of course, various methods ofinjecting data into a data stream may be employed.

Upon receiving the message 502 e, the platform server “P1” (102)processes (step 504 a) the authentication request message. In someimplementations, the platform server “P1” (102) authenticates thecredentials of the endpoint device D1 (104) using an authenticationregistry that it maintains. In some implementations, the platform server“P1” (102) may route the message to a back-office authentication-server(not shown) to perform the authentication.

The platform server “P1” (102) then prepares a return message 506 b(step 506 a). The return message 506 b may be related to theauthentication process (for example, pass or not passed), or it may bemerely be an acknowledgement of receipt of the message (for example,success receipt or receipt error). To this end, the return message 506 bmay be a status code, as described in relation to FIG. 4.

In some implementations, the platform server 102 prepares the returnmessage 506 b to include the “RequestId R1”, the “SessionId s1”, and the“EndpointId e1” as received in the request message 502 e. In essence,the platform server “P1” (102) merely employs the metadata informationof the received message to produce a return message, which may be anindicia of acknowledgement or success. The platform server “P1” (102)then sends the message 506 b (step 506 c) to the connection server 110over the second persistent connection.

Upon receiving the message 506 b, in some implementations, theconnection server “A1” (110) may use the “EndPointId e1” to identify theconnection to forward the message 506 b (step 506 d) to the Edge Server“E1” (106). To this end, no additional processing may be necessary to beperformed at the connection server “A1” (110). In some implementations,the “EndPointId e1” may be indexed to the connection handle associatedwith the persistent connection. The index may have been stored at theconnection server “A1” (110) within a hash table.

To this end, preserving state information for a roundtrip routingthrough a multiplexed persistent connection paradigm may collectivelyemploy a single hash-table lookup of an identifier associated with agiven persistent connection, a single write function to inject in theidentifier into a message header, and a single read of the messageheader to retrieve the communication handle to the same persistentconnection.

Referring still to FIG. 5, in some implementations, subsequent to anauthentication exchange, the edge server “E1” (106) initiates a bindingprocess. The binding process binds a path between the end-point device“D1” (104) and the platform server “P1” (102). At each node along thepath, the binding process associates a connection handle of a persistentconnection that points to the end-point device.

The binding process is synergistic with the usage of routing metadata.Routing metadata may allow for messages from the platform server to bequickly and efficiently returned to the end-point device.

In some implementations, the edge server “E1” (106) prepares a bindingmessage 508 a and sends the message 508 b (step 508 c) to the connectionserver “A1” (110) across the first persistent connection. The edgeserver “E1” (106) generates a “requestId R2”. In some implementations,the request message 508 b may include a “BIND” request code, asdescribed in relation to FIG. 4 and as shown as “B” in message 508 b.The payload of the request message 508 b may include the name identifierof the endpoint device “D1” (104).

Upon receiving the bind request message 508 b, in some implementations,the connection server “A1” (110) injects (step 508 d) “SessionId S1”(shown in FIG. 5 as “s1”) and “EndpointId e1” (shown as “e1”) into thereceived message 508 b to produce message 508 e.

Additionally, the connection server “A1” (110) determines that thereceived message is a bind request. To this end, it adds the nameidentifier located within the payload 304 to its binding registry. Inthe registry, the name identifier may be associated with a connectionhandle of the first persistent connection. For example, the nameidentifier is used as an index value in a hash table having theconnection handle.

The connection server “A1” (110) then sends (step 508 f) the bindrequest message 508 e to the platform server “P1” (102), over a secondpersistent connection.

Upon receiving the message 508 e, in some implementations, the platformserver “P1” (102) processes the bind request (step 510 a). For example,it may add the name identifier to its binding registry.

In some implementations, the platform server “P1” (102) prepares asuccess message 512 b (step 512 a). The platform server “P1” (102) sendsthe success message 512 b (step 512 c) to the connection server “A1”(110) over the second persistent connection. Upon receiving the message512 b, the connection server “A1” (110) may use the “EndPointId e1” toidentify the connection. The connection server “A1” (110) forwards themessage 512 e (step 512 d) to the edge server “E1” (106).

In some implementations, the edge server “E1” (106) may send a messageto the endpoint device “D1” (104) to acknowledge a successfulregistration process.

FIG. 6 is a swim-lane diagram of the method 600 of communicating fromthe platform server 102 over a stateless persistent connection inaccordance with an embodiment of the invention.

The method 600, in some implementations, begins with the platform server“P1” (102) preparing a request message 606 b (step 606 a) for the edgeserver “E1” (106).

The platform server “P1” (102) sends the request message 606 b to theconnection server “A1” (110) over the second persistent connection usinga connection handle determined from its binding registry.

Upon receiving the message 606 b, in some implementations, theconnection server “D1” (110) determines that the message is an outboundmessage from the platform server “P1” (102). This determination may bebased on the connection handle of the second persistent connection, orit may be based on the presence of a session identification number 308within the message 606 b. The connection server “D1” (110) may inject an“EndpointId e2” associated with the received connection handle for thesecond persistent connection (step 606 d). The connection server “D1”(110) may identify the appropriate persistent connection for the message606 b using the name identifier in the message 606 b and a correspondingconnection handle stored in its binding registry. The connection server“D1” (110) then forwards the message 606 e to the appropriate edgeserver “E1” (106) using the identified handle.

Upon receiving the message 606 e, in some implementations, the edgeserver “E1” (106) sends back a success/acknowledge message 610 a (step610 a) to the connection server “A1” (110) over the same persistentconnection, namely the first persistent connection. The edge server “E1”(106) uses the requested data in the message's payload 304 (step 608 a)and removes the data service request from its queue. The edge server“E1” (106) may generate a success message (step 608 a) and sends to theconnection server “A1” across the first persistent connection.

The connection server “A1” (110) receives the message 610 a and relaysthe message to the platform server “P1” (102) over the second persistentconnection using the “endPointId e2”. Upon receiving the acknowledgmentmessage 610 a, in some implementations, the platform server “P1” (102)removes the request message from its queue.

FIG. 7 is a flow chart for an example method 700 of controlling aconnection server 110 in accordance with an embodiment of the invention.In some implementations, the controls are based on policies that areexecuted from a client-side application operating at the connectionservers 110. A policy may include, for example, rule-base methodology, astate machine, a model-based control, and/or a sequential logic.

Upon receiving a message (step 702), the connection server 110determines whether an endpoint identification number 310 is present inthe message (step 704), as described in relation to FIGS. 5 and 6. Insome implementations, the endpoint identification number 310 is locatedin a fixed field within the message header 302. In otherimplementations, the connection server 110 may parse the message for theinformation. If an endpointId 310 is in the message, then the connectionserver 102 may route the message using the endpointId 310, as describedin relation to FIGS. 3, 5, and 6.

If the endpointId 310 is NULL or empty, the connection server 110 mayinject an identification number associated with a connection handleassociated to the channel that the id was received.

The connection server 110 may then check the message method code 312 todetermine the message type (step 710, 718, 724).

If the message type is an authentication message (step 710), theconnection server 110 may inject the session identification number 308into the message (step 712), as described in relation to FIGS. 5 and 6.The connection server 110 may bind the endpointId 310, the sessionId 308and the connection (step 714), as described in relation to FIG. 5, andforward the message to the platform server 102 (step 716).

If the message type is a bind or unbind message (step 718), theconnection server 110 may bind the name identifier located in themessage to its binding registry (or remove the name identifier in themessage from its binding registry) (step 720) and forward the message tothe platform server 102 (step 722).

If the message type is a request message (step 724), the connectionserver 110 may merely forward the request message to the platform server102 (step 726).

The connection server 110 may then check the request message todetermine whether the sessionId is present (step 728). If present, themessage may be routed to the respective edge server 106 using itsbinding registry to determine the appropriate connection handle. If notpresent, the connection server 110 may retrieve the SessionId using thenameId in the message (step 732), inject the SessionId into the message(step 734), and forward the message to the platform server (step 736).

FIG. 8 illustrates a method of binding and rebinding in accordance withan embodiment of the invention. The binding allows a given computingdevice 104 to be serviced by the federation while being connected to anyend-point device within the federation without any knowledge of thedevice's own location or any networking or routing details about nodeswithin the federation. To this end, the federation allows messages fromthe computing device to freely route to the platform server regardlessof the intermediate servers over this persistent-connectionarchitecture.

The method initiates with a given computing device 104, namely theend-point device 104 a, being registered, as described in relation toFIG. 5, with edge server 106 a. The edge server 106 sends a bind requestto a connection server 110 a over persistent connection 103 a. The bindrequest may include a name identifier of the end-point device 104 in thebinding list. The connection server 110 a forwards the bind request tothe platform server 802 over persistent connection 105 a. The connectionserver 110 a also associates the end-point device 104 a with thepersistent connection 103 a and stores the association in its bindingregistry. The association may be based on the connection handle of thepersistent connection. The binding registry may be a data table or ahash table. The platform server 102 a associates the end-point device104 a with persistent connection 105 a and stores the association in itsbinding registry. To this end, when sending a request message toend-point device 104 a, the platform server 102 retrieves the persistentconnection 105 associated to the end-point device 104 a.

Subsequent to binding, if the end-point device 106 a moves to anotheredge server, namely edge server 106 c, the end-point device 106 a wouldde-register with the edge server 106 a. The edge server 106 a would sendan unbind request to the primary server 102 a through the bounded path(103 a, 105 a). The unbind request would remove the end-point device 106a from the binding registry of the connection server 110 a and theplatform server 102. The end-point device 106 a would then register withthe edge-server 106 c and repeat the same binding process.

FIG. 9 is a block diagram of a network 900 using the system 100 inaccordance with an embodiment of the invention. The network 900 mayinclude back-end office components, as described in FIG. 2.

In some implementations, the network 900 may include one or morepersistent servers 902. The persistence servers can share the load fromdata being sent to the platform server 102, shown as routing servers102. The persistence servers 902 may employ specific types ofpersistence objects, such as Streams and DataTable. Examples of Streamsand DataTable are described in U.S. patent application Ser. No.13/678,885, titled “METHODS FOR DYNAMICALLY GENERATING APPLICATIONINTERFACE FOR MODELED ENTITY AND DEVICES THEREOF,” filed Nov. 16, 2012.The application is incorporated by reference herein in its entirety.

In some implementations, the network 900 may include one or moreback-office servers 904, such as CRM/ERP, including various servers asdescribed in relation to FIG. 2. In some implementations, the network900 may include one or more Big Data and Data Store 906. Such servers906 may communicate to the platform server 102 using Web protocols, suchas Java Database Connectivity (JDBC) or native APIs. In someimplementations, the platform server 102 may process an event to routethe data to the appropriate database when data is received from a givencomputing device 104. Alternatively, a third party application mayinitiate an event.

FIG. 10 is a flowchart of an example method 1000 of injecting the stateand routing information into a communication exchange between a platformserver 102 and an end-point device 104 over a stateless persistentconnection in accordance with an embodiment of the invention. An exampleof a stateless persistent connection is a Web-Socket connection. Theend-point device may be the edge server 106 or the computing device 104.The method 1000 may include providing one or more platform servers 102connected to one or more intermediate servers 110. Each of theintermediate servers 110 may connect and maintain a persistentconnection 200 a to the platform server 102. The intermediate servers102 may also communicate and maintain a number of unique persistentconnections 200 b with a plurality of edge servers.

In some implementations, a port at a given intermediate server 110receives a service request from a given edge server 106 over a firstpersistent connection 200 b (step 1002). The processor, at theintermediate server 110, inserts a session identifier to the servicerequest (step 1004). The session identifier is associated to aconnection identity of the first persistent connection. The associationis stored in memory at the intermediate server. The intermediate server110 is preferably “stateless” in that it does not retain stateinformation associated with a given request message. In suchimplementations, the intermediate server 110 preferably does notmaintain knowledge of whether a similar request message has beenpreviously sent and which of a sequence of message action this messagebelongs thereto. Put another way, it forgets a given message afterhaving received and forwarded it along.

Such stateless paradigm may reduce the workload of the intermediateserver 110 as it can, thus, be configured to operate with a fewer set ofinstructions and with lower memory usage requirements. To this end, withless resource being required for a given connection, a givenintermediate server 110 can service more numbers of computing devices104 as compared to a comparable hardware system that operates theadditional overhead work of maintaining such message state information.In some implementations, the given session identifier is injected into aheader portion, such as the header 402, of each request message.

The intermediate server may maintain, in the memory, a second stateidentifier associated with an authentication session of a computingdevice 104. The second state identifier may be associated with a namevalue associated with the computing device 104. The second stateidentifier may also be associated to the connection identity of thefirst persistent connection. The association may be stored in the localmemory of the intermediate server 110. In some implementations, theintermediate server 110 may maintain the association in a hash table.The table may use name value to index the second state identifier and anetwork handle created when the persistent connection was established.

In some implementations, the name value is preferably anon-network-based addressable identifier. Rather than a networkaddressable identifiers, which can be for example a uniform resourceidentifier (URI) or an Internet Protocol (IP) address, the name valuecan be a number sequence or a character string.

In some implementations, the intermediate server 110 transmits theservice request to the platform server 102 over a second persistentconnection (step 1006).

In some implementations, the intermediate server 110 receives a responsemessage over the second persistent connection 200 a. The responsemessage may have been generated by the platform server in response tothe service request and may include the session identifier (step 1008).

In some implementations, the intermediate server 110 retrieves theconnection identity of the first persistent connection using the sessionidentifier (step 1010). The session identifier is the same sessionidentifier transmitted within the service request.

In some implementations, the intermediate server 110 routes the responsemessage to a selected connection among the numbers of persistentconnections established with the edge servers (step 1012). The selectedconnection may be based on the retrieved connection identity.

FIG. 11 is a flowchart of an example method 1100 of communicationbetween two network nodes and an intermediary node over a persistentconnection in accordance with an embodiment of the invention. In someimplementations, the method 1100 begins at an initialized state at step1102 where the two network nodes may include the platform server 102 andan end-point device, namely the computing device 104. The method 1100may include providing one or more platform servers 102 connected to oneor more intermediate servers 110. Each of the intermediate servers 110may connect and maintain a persistent connection 200 a to the platformserver 102. The intermediate servers 102 may communicate and maymaintain a number of unique persistent connections 200 b with aplurality of edge servers 104.

In some implementations, the platform server 102 binds, at a first timeinstance, the end-point device 104 to the platform server 102 (step1104). The binding, at the first instance, may associate with a firstpath across the network. The first path may be defined between theend-point device 104 and the platform server 102 across one or moreintermediary servers and one or more edge servers.

In some implementations, the platform server 102 communicates a firstmessage to the end-point device 104 along the first path (step 1106).

In some implementations, the platform server 102 rebinds, at a secondinstance, the end-point device 104 to the platform server 102 (step1108). This may occur after the end-point device 104 has moved to anedge server different from the first path.

In some implementations, the platform server 102 communicates a secondmessage to the end-point device along the second path (step 1110). Tothis end, the end-point device can move among different geographiclocations without regard to its own knowledge of its location. Rather,the network may discover a path for message to flow to and from theplatform server without any knowledge on the part of the end-pointdevice 104.

FIG. 12 is a flow chart of an example method 1200 of communicationbetween the platform server and a plurality of an end-point device 104in accordance with an embodiment of the invention. In someimplementations, the method 1200 begins at an initialized state (step1202). In some implementations, the platform server 102 receives a firstdata message from a first end-point device 104 a over a first persistentconnection 105 a (step 1204). The first data message has been routedthrough a first intermediate server 110 a over a second persistentconnection 103 a.

In some implementations, the platform server 102 receives a second datamessage from a second end-point device 104 b over a third persistentconnection 105 b (step 1206). The second data message has been routedthrough a second intermediate server 110 b over a fourth persistentconnection 103 b.

Each of the first intermediate server 110 a and second intermediateserver 110 b may manage both the authentication sessions and theconnectivity between the end-point devices 104 and the platform servers102.

In some implementations, the platform server 102 services the first datamessage and the second data message (step 1208). The platform server 102may service the first data message and the second data message byrouting the messages to a back-office server. As described in relationto FIG. 2, the back-office server may include, for example, apersistence server, a database server, a customer relationshipmanagement (CRM) server, an enterprise resource planning (ERP) server,an operation support system (OSS) server, a business support system(BSS) server, or a data warehouse.

FIG. 13 shows an example of a computing device 1300 and a mobilecomputing device 1350 that can be used to implement the techniquesdescribed in this disclosure. The computing device 1300 is intended torepresent various forms of digital computers, such as laptops, desktops,workstations, personal digital assistants, servers, blade servers,mainframes, and other appropriate computers. The mobile computing device1350 is intended to represent various forms of mobile devices, such aspersonal digital assistants, cellular telephones, smart-phones, andother similar computing devices. The components shown here, theirconnections and relationships, and their functions, are meant to beexamples only, and are not meant to be limiting.

The computing device 1300 may include a processor 1302, a memory 1304, astorage device 1306, a high-speed interface 1308 connecting to thememory 1304 and multiple high-speed expansion ports 1310, and alow-speed interface 1312 connecting to a low-speed expansion port 1314and the storage device 1306. Each of the processor 1302, the memory1304, the storage device 1306, the high-speed interface 1308, thehigh-speed expansion ports 1310, and the low-speed interface 1312, areinterconnected using various busses, and may be mounted on a commonmotherboard or in other manners as appropriate. The processor 1302 canprocess instructions for execution within the computing device 1300,including instructions stored in the memory 1304 or on the storagedevice 1306 to display graphical information for a GUI on an externalinput/output device, such as a display 1316 coupled to the high-speedinterface 1308. In other implementations, multiple processors and/ormultiple buses may be used, as appropriate, along with multiple memoriesand types of memory. Also, multiple computing devices may be connected,with each device providing portions of the necessary operations (e.g.,as a server bank, a group of blade servers, or a multi-processorsystem).

The memory 1304 stores information within the computing device 1300. Insome implementations, the memory 1304 is a volatile memory unit orunits. In some implementations, the memory 1304 is a non-volatile memoryunit or units. The memory 1304 may also be another form ofcomputer-readable medium, such as a magnetic or optical disk.

The storage device 1306 is capable of providing mass storage for thecomputing device 1300. In some implementations, the storage device 1306may be or contain a computer-readable medium, such as a floppy diskdevice, a hard disk device, an optical disk device, or a tape device, aflash memory or various solid state memory device, or an array ofdevices, including devices in a storage area network or variousconfigurations. Instructions can be stored in an information carrier.The instructions, when executed by one or more processing devices (forexample, processor 1302), perform one or more methods, such as thosedescribed above. The instructions can also be stored by one or morestorage devices such as computer- or machine-readable mediums (forexample, the memory 1304, the storage device 1306, or memory on theprocessor 1302).

The high-speed interface 1308 manages bandwidth-intensive operations forthe computing device 1300, while the low-speed interface 1312 manageslower bandwidth-intensive operations. Such allocation of functions is anexample only. In some implementations, the high-speed interface 1308 iscoupled to the memory 1304, the display 1316 (e.g., through a graphicsprocessor or accelerator), and to the high-speed expansion ports 1310,which may accept various expansion cards (not shown). In theimplementations, the low-speed interface 1312 is coupled to the storagedevice 1306 and the low-speed expansion port 1314. The low-speedexpansion port 1314, which may include various communication ports(e.g., USB, Bluetooth®, Ethernet, wireless Ethernet) may be coupled toone or more input/output devices, such as a keyboard, a pointing device,a scanner, or a networking device such as a switch or router, e.g.,through a network adapter.

The computing device 1300 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as astandard server 1320, or multiple times in a group of such servers. Inaddition, it may be implemented in a personal computer such as a laptopcomputer 1322. It may also be implemented as part of a rack serversystem 1324. Alternatively, components from the computing device 1300may be combined with other components in a mobile device (not shown),such as a mobile computing device 1350. Each of such devices may containone or more of the computing device 1300 and the mobile computing device1350, and an entire system may be made up of multiple computing devicescommunicating with each other.

The mobile computing device 1350 may include a processor 1352, a memory1364, an input/output device such as a display 1354, a communicationinterface 1366, and a transceiver 1368, among other components. Themobile computing device 1350 may also be provided with a storage device,such as a micro-drive or other device, to provide additional storage.Each of the processor 1352, the memory 1364, the display 1354, thecommunication interface 1366, and the transceiver 1368, areinterconnected using various buses, and several of the components may bemounted on a common motherboard or in other manners as appropriate.

The processor 1352 can execute instructions within the mobile computingdevice 1350, including instructions stored in the memory 1364. Theprocessor 1352 may be implemented as a chipset of chips that includeseparate and multiple analog and digital processors. The processor 1352may provide, for example, for coordination of the other components ofthe mobile computing device 1350, such as control of user interfaces,applications run by the mobile computing device 1350, and wirelesscommunication by the mobile computing device 1350.

The processor 1352 may communicate with a user through a controlinterface 1358 and a display interface 1356 coupled to the display 1354.The display 1354 may be, for example, a TFT (Thin-Film-Transistor LiquidCrystal Display) display or an OLED (Organic Light Emitting Diode)display, or other appropriate display technology. The display interface1356 may comprise appropriate circuitry for driving the display 1354 topresent graphical and other information to a user. The control interface1358 may receive commands from a user and convert them for submission tothe processor 1352. In addition, an external interface 1362 may providecommunication with the processor 1352, so as to enable near areacommunication of the mobile computing device 1350 with other devices.The external interface 1362 may provide, for example, for wiredcommunication in some implementations, or for wireless communication inother implementations, and multiple interfaces may also be used.

The memory 1364 stores information within the mobile computing device1350. The memory 1364 can be implemented as one or more of acomputer-readable medium or media, a volatile memory unit or units, or anon-volatile memory unit or units. An expansion memory 1374 may also beprovided and connected to the mobile computing device 1350 through anexpansion interface 1372, which may include, for example, a SIMM (SingleIn Line Memory Module) card interface. The expansion memory 1374 mayprovide extra storage space for the mobile computing device 1350, or mayalso store applications or other information for the mobile computingdevice 1350. Specifically, the expansion memory 1374 may includeinstructions to carry out or supplement the processes described above,and may include secure information also. Thus, for example, theexpansion memory 1374 may be provide as a security module for the mobilecomputing device 1350, and may be programmed with instructions thatpermit secure use of the mobile computing device 1350. In addition,secure applications may be provided via the SIMM cards, along withadditional information, such as placing identifying information on theSIMM card in a non-hackable manner.

The memory may include, for example, flash memory and/or NVRAM memory(non-volatile random access memory), as discussed below. In someimplementations, instructions are stored in an information carrier. thatthe instructions, when executed by one or more processing devices (forexample, processor 1352), perform one or more methods, such as thosedescribed above. The instructions can also be stored by one or morestorage devices, such as one or more computer- or machine-readablemediums (for example, the memory 1364, the expansion memory 1374, ormemory on the processor 1352). In some implementations, the instructionscan be received in a propagated signal, for example, over thetransceiver 1368 or the external interface 1362.

The mobile computing device 1350 may communicate wirelessly through thecommunication interface 1366, which may include digital signalprocessing circuitry where necessary. The communication interface 1366may provide for communications under various modes or protocols, such asGSM voice calls (Global System for Mobile communications), SMS (ShortMessage Service), EMS (Enhanced Messaging Service), or MMS messaging(Multimedia Messaging Service), CDMA (code division multiple access),TDMA (time division multiple access), PDC (Personal Digital Cellular),WCDMA (Wideband Code Division Multiple Access), CDMA2000, or GPRS(General Packet Radio Service), among others. Such communication mayoccur, for example, through the transceiver 1368 using aradio-frequency. In addition, short-range communication may occur, suchas using a Bluetooth®, Wi-Fi™, or other such transceiver (not shown). Inaddition, a GPS (Global Positioning System) receiver module 1370 mayprovide additional navigation- and location-related wireless data to themobile computing device 1350, which may be used as appropriate byapplications running on the mobile computing device 1350.

The mobile computing device 1350 may also communicate audibly using anaudio codec 1360, which may receive spoken information from a user andconvert it to usable digital information. The audio codec 1360 maylikewise generate audible sound for a user, such as through a speaker,e.g., in a handset of the mobile computing device 1350. Such sound mayinclude sound from voice telephone calls, may include recorded sound(e.g., voice messages, music files, etc.) and may also include soundgenerated by applications operating on the mobile computing device 1350.

The mobile computing device 1350 may be implemented in a number ofdifferent forms, as shown in the figure. For example, it may beimplemented as a cellular telephone 1380. It may also be implemented aspart of a smart-phone 1382, personal digital assistant, or other similarmobile device.

Various implementations of the systems and techniques described here canbe realized in digital electronic circuitry, integrated circuitry,specially designed ASICs (application specific integrated circuits),computer hardware, firmware, software, and/or combinations thereof.These various implementations can include implementations in one or morecomputer programs that are executable and/or interpretable on aprogrammable system including at least one programmable processor, whichmay be special or general purpose, coupled to receive data andinstructions from, and to transmit data and instructions to, a storagesystem, at least one input device, and at least one output device.

These computer programs (also known as programs, software, softwareapplications or code) include machine instructions for a programmableprocessor, and can be implemented in a high-level procedural and/orobject-oriented programming language, and/or in assembly/machinelanguage. As used herein, the terms machine-readable medium andcomputer-readable medium refer to any computer program product,apparatus and/or device (e.g., magnetic discs, optical disks, memory,Programmable Logic Devices (PLDs)) used to provide machine instructionsand/or data to a programmable processor, including a machine-readablemedium that receives machine instructions as a machine-readable signal.The term machine-readable signal refers to any signal used to providemachine instructions and/or data to a programmable processor.

To provide for interaction with a user, the systems and techniquesdescribed here can be implemented on a computer having a display device(e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor)for displaying information to the user and a keyboard and a pointingdevice (e.g., a mouse or a trackball) by which the user can provideinput to the computer. Other kinds of devices can be used to provide forinteraction with a user as well; for example, feedback provided to theuser can be any form of sensory feedback (e.g., visual feedback,auditory feedback, or tactile feedback); and input from the user can bereceived in any form, including acoustic, speech, or tactile input.

The systems and techniques described here can be implemented in acomputing system that may include a back end component (e.g., as a dataserver), or that may include a middleware component (e.g., anapplication server), or that may include a front end component (e.g., aclient computer having a graphical user interface or a Web browserthrough which a user can interact with an implementations of the systemsand techniques described here), or any combination of such back end,middleware, or front end components. The components of the system can beinterconnected by any form or medium of digital data communication(e.g., a communication network). Examples of communication networksinclude a local area network (LAN), a wide area network (WAN), and theInternet.

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other.

In view of the structure, functions and apparatus of the systems andmethods described here, in some implementations, a system and method forinjecting state and routing information into a communication exchangebetween a platform server and an end-point device over a statelesspersistent connection are provided. Having described certainimplementations of methods and apparatus for supporting injection of thestate and routing information into the communication exchange, it willnow become apparent to one of skill in the art that otherimplementations incorporating the concepts of the disclosure may beused.

Moreover, in view of the structure, functions and apparatus of thesystems and methods described here, in some implementations, a systemand method for communication over a set of persistent connectionsbetween two network nodes and an intermediary node are provided. Havingdescribed certain implementations of methods and apparatus forsupporting communication over the persistent connection, it will nowbecome apparent to one of skill in the art that other implementationsincorporating the concepts of the disclosure may be used.

Moreover, in view of the structure, functions and apparatus of thesystems and methods described here, in some implementations, a systemand method for communication over a set of persistent connectionsbetween two network nodes and an intermediary node are provided. Havingdescribed certain implementations of methods and apparatus forsupporting communication over the persistent connection, it will nowbecome apparent to one of skill in the art that other implementationsincorporating the concepts of the disclosure may be used.

Therefore, the disclosure should not be limited to certainimplementations, but rather should be limited only by the spirit andscope of the following claims.

What is claimed:
 1. A computer-implemented method of communicationbetween a platform server and an end-point device, the methodcomprising: providing a platform server, a set of intermediary servers,and a set of edge servers, collectively defining a network, wherein anend-point device communicates to an edge server of the set of edgeservers, wherein the set of edge servers communicates to the set ofintermediary servers, and wherein the set of intermediary serverscommunicates to a platform server; binding, at the platform server, at afirst instance, the end-point device to the platform server, wherein theplatform server binds, at the first instance, the end-point device usinga non-addressable name value associated to the end-point device, whereinthe binding, at the first instance, associates a first path across thenetwork, and wherein the first path is defined between the end-pointdevice and the platform server across one or more intermediary serversand one or more edge servers, including a first intermediary server;communicating, at the platform server, a first message to the end-pointdevice along the first path; rebinding, at the platform server, at asecond instance, the end-point device to the platform server, whereinthe platform server binds, at the second instance the end-point device,using the non-addressable name value associated to the end-point device,wherein the rebinding, at the second instance, associates a second pathacross the network, wherein the second path is defined between theend-point device and the platform server across one or more intermediaryservers and one or more edge servers, including a second intermediaryserver; communicating, at the platform server, a second message to theend-point device along the second path.
 2. The computer-implementedmethod of claim 1 further comprising: receiving, at the platform server,at a given instance between the first and second instances, a request tounbind the end-point device from the platform server, wherein theplatform server unbinds the end-point device based on the unbindrequest, wherein the unbinding dissociates the first path definedbetween the end-point device and the platform server.
 3. Thecomputer-implemented method of claim 1, wherein each of the first pathand the second path comprises a connection handle to an establishedpersistent connection.
 4. The computer-implemented method of claim 3,wherein the established persistent connection comprises a WebSocketconnection.
 5. The computer-implemented method of claim 1, wherein thenon-addressable name value comprises a character string.
 6. Thecomputer-implemented method of claim 1 further comprising: binding, atthe platform server, at the first instance, a second end-point device tothe platform server, wherein the platform server binds, at the firstinstance, the second end-point device based on a second non-addressablename value associated to the second end-point device.
 7. Thecomputer-implemented method of claim 6, wherein the binding of the firstend-point device and the binding of the second end-point device is theresult of a single bind request.
 8. The computer-implemented method ofclaim 1, wherein at least one of the first path and the second pathincludes at least two intermediary servers.
 9. A computer-implementedmethod of communication between a platform server and an end-pointdevice, the method comprising: providing a platform server, a set ofintermediary servers, and a set of edge servers, collectively defining anetwork, wherein an end-point device communicates to an edge server ofthe set of edge servers, wherein the set of edge servers communicates tothe set of intermediary servers, and wherein the set of intermediaryservers communicates to the platform server; binding, at an intermediaryserver of the set of intermediary servers, at a first instance, theend-point device to the intermediary server, wherein the intermediaryserver binding at the first instance the end-point device based on anon-addressable name value associated to the end-point device, whereinthe binding, at the first instance, associates a given persistentconnection to a given edge server of the set of edge servers, the givenedge server communicating with the end-point device; receiving, at theintermediary server, a signal from platform server, the signal having avalue associated with the non-addressable name value of the end-pointdevice; determining at the intermediary server, a persistent connectionamong a set of persistent connection having been established to the setof edge servers, wherein the non-addressable name value has beenassociated to the persistent connection during the binding; andtransmitting, at the intermediary server, the signal to the end-pointdevice using the determined persistent connection.
 10. A non-transitorycomputer readable medium having instruction stored thereon, wherein theinstructions, when executed by a processor, cause the processor to:provide a platform server, a set of intermediary servers, and a set ofedge servers, collectively defining a network, wherein an end-pointdevice communicates to an edge server of the set of edge servers, theset of edge servers communicates to the set of intermediary servers, andthe set of intermediary servers communicates to a platform server; bind,at a platform server, at a first instance, the end-point device to theplatform server, wherein the platform server binds, at the firstinstance, the end-point device based on a non-addressable name valueassociated to the end-point device, wherein the binding, at the firstinstance, associates a first path across the network, wherein the firstpath is defined between the end-point device and the platform serveracross one or more intermediary servers and one or more edge servers,including a first intermediary server; communicate, at the platformserver, a first message to the end-point device along the first path;rebind, at the platform server, at a second instance, the end-pointdevice to the platform server, wherein the platform server binds, at thesecond instance, the end-point device based on the non-addressable namevalue associated to the end-point device, wherein the rebinding, at thesecond instance, associates a second path across the network, whereinthe second path is defined between the end-point device and the platformserver across one or more intermediary servers and one or more edgeservers, including a second intermediary server; communicate, at theplatform server, a second message to the end-point device along thesecond path.
 11. The computer readable medium of claim 10, wherein theinstructions further comprise: receive, at the platform server, at agiven instance between the first and second instances, a request tounbind the end-point device from the platform server, wherein theplatform server unbinds the end-point device based on the unbindrequest, wherein the unbinding dissociates the first path definedbetween the end-point device and the platform server.
 12. The computerreadable medium of claim 10, wherein each of the first path and thesecond path comprises a connection handle to an established persistentconnection.
 13. The computer readable medium of claim 12, wherein theestablished persistent connection comprises a WebSocket connection. 14.The computer readable medium of claim 10, wherein the non-addressablename value comprises a character string.
 15. The computer readablemethod of claim 10, wherein the instructions further comprise: bind, atthe platform server, at the first instance, a second end-point device tothe platform server, wherein the platform server binds, at the firstinstance, the second end-point device based on a second non-addressablename value associated to the second end-point device.
 16. The computerreadable medium of claim 15, wherein the binding of the first end-pointdevice and the binding of the second end-point device is the result of asingle bind request.
 17. The computer readable medium of claim 10,wherein at least one of the first path and the second path includes atleast two intermediary servers.
 18. A non-transitory computer readablemedium having instruction stored thereon, wherein the instructions, whenexecuted by a processor, cause the processor to: provide a platformserver, a set of intermediary servers, and a set of edge servers,collectively defining a network, wherein an end-point devicecommunicates to an edge server of the set of edge servers, wherein theset of edge servers communicates to the set of intermediary servers, andwherein the set of intermediary servers communicates to the platformserver; bind, at an intermediary server of the set of intermediaryservers, at a first instance, the end-point device to the intermediaryserver, wherein the intermediary server binds, at the first instance,the end-point device based on a non-addressable name value associated tothe end-point device, wherein the binding, at the first instance,associates a given persistent connection to a given edge server of theset of edge servers, the given edge server communicating with theend-point device; receive, at the intermediary server, a signal fromplatform server, the signal having a value associated with thenon-addressable name value of the end-point device; determine apersistent connection among a set of persistent connection having beenestablished to the set of edge servers, wherein the non-addressable namevalue has been associated to the persistent connection during thebinding; and transmit, at the intermediary server, the signal to theend-point device using the determined persistent connection.
 19. Asystem comprising: a processor; and a memory, the memory storinginstructions that, when executed by the processor, cause the processorto: provide a platform server, a set of intermediary servers, and a setof edge servers, collectively defining a network, wherein an end-pointdevice communicates to an edge server of the set of edge servers,wherein the set of edge servers communicates to the set of intermediaryservers, and wherein the set of intermediary servers communicates to aplatform server; bind, at a platform server, at a first instance, theend-point device to the platform server, wherein the platform serverbinds, at the first instance, the end-point device based on anon-addressable name value associated to the end-point device, whereinthe binding, at the first instance, associates a first path across thenetwork, and wherein the first path is defined between the end-pointdevice and the platform server across one or more intermediary serversand one or more edge servers, including a first intermediary server;communicate, at the platform server, a first message to the end-pointdevice along the first path; rebind, at the platform server, at a secondinstance, the end-point device to the platform server, wherein theplatform server binds, at the second instance, the end-point devicebased on the non-addressable name value associated to the end-pointdevice, wherein the rebinding, at the second instance, associates asecond path across the network, and wherein the second path is definedbetween the end-point device and the platform server across one or moreintermediary servers and one or more edge servers, including a secondintermediary server; communicate, at the platform server, a secondmessage to the end-point device along the second path.
 20. A systemcomprising: a processor; and a memory, the memory storing instructionsthat, when executed by the processor, cause the processor to: provide aplatform server, a set of intermediary servers, and a set of edgeservers, collectively defining a network, wherein an end-point devicecommunicates to an edge server of the set of edge servers, wherein theset of edge servers communicates to the set of intermediary servers, andwherein the set of intermediary servers communicates to the platformserver; bind, at an intermediary server of the set of intermediaryservers, at a first instance, the end-point device to the intermediaryserver, wherein the intermediary server binds, at the first instance,the end-point device based on a non-addressable name value associated tothe end-point device, and wherein the binding, at the first instance,associates a given persistent connection to a given edge server of theset of edge servers, the given edge server communicating with theend-point device; receive, at the intermediary server, a signal fromplatform server, the signal having a value associated with thenon-addressable name value of the end-point device; determine apersistent connection among a set of persistent connection having beenestablished to the set of edge servers, wherein the non-addressable namevalue has been associated to the persistent connection during thebinding; and transmit, at the intermediary server, the signal to theend-point device using the determined persistent connection.